package com.tanhua.dubbo.server.api;


import com.tanhua.dubbo.server.enums.CommentType;
import com.tanhua.dubbo.server.pojo.Comment;
import com.tanhua.dubbo.server.pojo.Publish;
import com.tanhua.dubbo.server.pojo.Video;
import com.tanhua.dubbo.server.vo.PageInfo;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;

/**
 * 圈子接口
 */
public interface QuanZiApi {

    /**
     * 查询好友动态
     * 【接口】
     *
     * @param userId   用户id
     * @param page     当前页
     * @param pageSize 页大小
     * @return 好友动态集合
     */
    PageInfo<Publish> queryBuddyPublishList(Long userId, Integer page, Integer pageSize);

    /**
     * 发布动态
     * 【接口】
     *
     * @param publish 动态对象
     * @return 发布成功返回动态id
     */
    String savePublish(Publish publish);


    /**
     * 查询推荐动态
     * 【接口】
     *
     * @param userId   用户id
     * @param page     当前页
     * @param pageSize 页大小
     * @return 好友动态集合
     */
    PageInfo<Publish> queryRecommendPublishList(Long userId, Integer page, Integer pageSize);


    /**
     * 根据id查询动态（单条）
     * 【接口】
     *
     * @param publishId 动态id
     * @return
     */
    Publish queryPublishById(String publishId);


    /**
     * 根据id查询Comment对象
     *
     * @param commentId 主键id
     * @return
     */
    Comment queryCommentById(String commentId);

    /**
     * 根据id查询视频对象
     *
     * @param videoId 小视频id
     * @return
     */
    Video queryVideoById(String videoId);


    /**
     * 点赞 或者 喜欢
     * 【接口】
     *
     * @param userId      用户id
     * @param publishId   动态id
     * @param commentType 评论类型
     * @return 操作是否成功
     */
    Boolean likeOrLoveComment(Long userId, String publishId, CommentType commentType);


    /**
     * 取消点赞 或者 取消喜欢
     * 【接口】
     *
     * @param userId      用户id
     * @param publishId   动态id
     * @param commentType 评论类型
     * @return 操作是否成功
     */
    Boolean disLikeOrLoveComment(Long userId, String publishId, CommentType commentType);


    /**
     * 查询 点赞数 获取 喜欢数
     * 【接口】
     *
     * @param publishId   动态id
     * @param commentType 评论类型
     * @return 数量
     */
    Long queryLikeOrLoveCount(String publishId, CommentType commentType);


    /**
     * 查询⽤户是否点赞 或者 爱该动态
     * 【接口】
     *
     * @param userId      用户id
     * @param publishId   动态id
     * @param commentType 评论类型
     * @return 用户是否操作
     */
    Boolean queryUserIsLikeOrLove(Long userId, String publishId, CommentType commentType);


    /**
     * 查询评论
     * 【接口】
     *
     * @param publishId 动态id
     * @param page      当前页
     * @param pageSize  页大小
     * @return 评论信息
     */
    PageInfo<Comment> queryCommentList(String publishId, Integer page, Integer pageSize);


    /**
     * 发表评论
     * 【接口】
     *
     * @param userId    用户id
     * @param publishId 动态id
     * @param content   评论文本
     * @return 是否发表成功
     */
    Boolean saveComment(Long userId, String publishId, String content);


    /**
     * 查询评论数
     *
     * @param publishId   动态id
     * @param commentType 评论类型
     * @return 评论数
     */
    Long queryCommentCount(String publishId, CommentType commentType);


    /**
     * 查询对我的点赞\喜欢\评论消息列表
     *
     * @param userId      用户id
     * @param commentType 评论类型
     * @param page        当前页
     * @param pageSize    页大小
     * @return
     */
    PageInfo<Comment> queryLikeOrLoveOrCommentListByUser(Long userId, CommentType commentType, Integer page, Integer pageSize);


    /**
     * 查询相册表
     *
     * @param userId   用户id
     * @param page     当前页
     * @param pageSize 页大小
     * @return
     */
    PageInfo<Publish> queryAlbumList(Long userId, Integer page, Integer pageSize);

}
